| Plant | Flowers | Date | lon | lat | ele | Month | Year | julian |
|---|---|---|---|---|---|---|---|---|
| Glossoloma oblongicalyx | 4 | 2015-10-19 | -78.59093 | 0.130838 | 2270 | October | 2015 | 292 |
| Gasteranthus quitensis | 2 | 2016-10-17 | -78.59770 | 0.120070 | 1940 | October | 2016 | 291 |
| Kohleria affinis | 1 | 2016-12-13 | -78.59534 | 0.126746 | 2110 | December | 2016 | 348 |
| Columnea ciliata | 3 | 2014-02-27 | -78.59934 | 0.116682 | 1960 | February | 2014 | 58 |
| Columnea medicinalis | 1 | 2014-04-23 | -78.59372 | 0.128700 | 2130 | April | 2014 | 113 |
| Drymonia teuscheri | 3 | 2016-07-28 | -78.59245 | 0.129393 | 2200 | July | 2016 | 210 |
Correlation among matrices
As range
ade4::mantel.rtest(as.dist(D),as.dist(Dtraits))
## Monte-Carlo test
## Call: ade4::mantel.rtest(m1 = as.dist(D), m2 = as.dist(Dtraits))
##
## Observation: 0.462266
##
## Based on 99 replicates
## Simulated p-value: 0.01
## Alternative hypothesis: greater
##
## Std.Obs Expectation Variance
## 3.721614673 0.001911803 0.015301056
ade4::mantel.rtest(as.dist(Dint),as.dist(Dtraits))
## Monte-Carlo test
## Call: ade4::mantel.rtest(m1 = as.dist(Dint), m2 = as.dist(Dtraits))
##
## Observation: 0.09988545
##
## Based on 99 replicates
## Simulated p-value: 0.28
## Alternative hypothesis: greater
##
## Std.Obs Expectation Variance
## 0.7799621037 -0.0009348335 0.0167089369
ade4::mantel.rtest(as.dist(D),as.dist(Dint))
## Monte-Carlo test
## Call: ade4::mantel.rtest(m1 = as.dist(D), m2 = as.dist(Dint))
##
## Observation: 0.1268094
##
## Based on 99 replicates
## Simulated p-value: 0.26
## Alternative hypothesis: greater
##
## Std.Obs Expectation Variance
## 0.70262285 0.00961582 0.02782038
Equal probability of flowering at anytime.
## sink("model/threshold_baseline.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<-alpha[PredPlant[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
##
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3164
## Total graph size: 14644
##
## Initializing model
Equal probability of flowering per elevation
## sink("model/threshold_baseline_site.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x],Site[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<-alpha[PredPlant[x],NewSite[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #Priors
##
## #Species level priors
##
## for(i in 1:Sites){
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j,i] ~ dnorm(0,0.386)
##
## }
## }
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3234
## Total graph size: 18143
##
## Initializing model
## sink("model/threshold_attraction.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]] + e[Plant[x],Site[x],Month[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<- alpha[NewPlant[x]] + e[NewPlant[x],NewSite[x],NewMonth[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #########################
## #autocorrelation in error
## #########################
##
## #For each of observation
## for(y in 1:Sites){
## for(x in 1:Months){
## e[1:Plants,y,x] ~ dmnorm(zeros,tauC[,])
## }
## }
##
## ##covariance among similiar species
## for(i in 1:Plants){
## for(j in 1:Plants){
## C[i,j] = exp(-lambda_cov * D[i,j])
## }
## }
##
## ## Covert variance to precision for each parameter, allow omega to shrink to identity matrix
## vCov = omega*C[,] + (1-omega) * I
## tauC=inverse(vCov*gamma)
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
## #Autocorrelation priors
## gamma = 1
##
## #Strength of covariance decay
## lambda_cov = 2
## omega = 1
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3236
## Total graph size: 26804
##
## Initializing model
## sink("model/threshold_repulsion.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]] + e[Plant[x],Site[x],Month[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<- alpha[NewPlant[x]] + e[NewPlant[x],NewSite[x],NewMonth[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #########################
## #autocorrelation in error
## #########################
##
## #For each of observation
## for(x in 1:Months){
## for(y in 1:Sites){
## e[1:Plants,y,x] ~ dmnorm(zeros,tauC[,])
## }
## }
## ##covariance among similiar species
## for(i in 1:Plants){
## for(j in 1:Plants){
## C[i,j] = exp(-lambda_cov * D[i,j])
## }
## }
##
## ## Covert variance to precision for each parameter, allow omega to shrink to identity matrix
## vCov = omega*C[,] + (1-omega) * I
## tauC=vCov*gamma
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
## #Autocorrelation priors
## gamma = 10
##
## #Strength of covariance decay
## lambda_cov = 1
## omega = 1
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3236
## Total graph size: 26803
##
## Initializing model
## sink("model/threshold_attraction.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]] + e[Plant[x],Site[x],Month[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<- alpha[NewPlant[x]] + e[NewPlant[x],NewSite[x],NewMonth[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #########################
## #autocorrelation in error
## #########################
##
## #For each of observation
## for(y in 1:Sites){
## for(x in 1:Months){
## e[1:Plants,y,x] ~ dmnorm(zeros,tauC[,])
## }
## }
##
## ##covariance among similiar species
## for(i in 1:Plants){
## for(j in 1:Plants){
## C[i,j] = exp(-lambda_cov * D[i,j])
## }
## }
##
## ## Covert variance to precision for each parameter, allow omega to shrink to identity matrix
## vCov = omega*C[,] + (1-omega) * I
## tauC=inverse(vCov*gamma)
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
## #Autocorrelation priors
## gamma = 1
##
## #Strength of covariance decay
## lambda_cov = 2
## omega = 1
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3236
## Total graph size: 26960
##
## Initializing model
## sink("model/threshold_repulsion.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]] + e[Plant[x],Site[x],Month[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<- alpha[NewPlant[x]] + e[NewPlant[x],NewSite[x],NewMonth[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #########################
## #autocorrelation in error
## #########################
##
## #For each of observation
## for(x in 1:Months){
## for(y in 1:Sites){
## e[1:Plants,y,x] ~ dmnorm(zeros,tauC[,])
## }
## }
## ##covariance among similiar species
## for(i in 1:Plants){
## for(j in 1:Plants){
## C[i,j] = exp(-lambda_cov * D[i,j])
## }
## }
##
## ## Covert variance to precision for each parameter, allow omega to shrink to identity matrix
## vCov = omega*C[,] + (1-omega) * I
## tauC=vCov*gamma
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
## #Autocorrelation priors
## gamma = 10
##
## #Strength of covariance decay
## lambda_cov = 1
## omega = 1
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3236
## Total graph size: 26959
##
## Initializing model
## sink("model/threshold_attraction.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]] + e[Plant[x],Site[x],Month[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<- alpha[NewPlant[x]] + e[NewPlant[x],NewSite[x],NewMonth[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #########################
## #autocorrelation in error
## #########################
##
## #For each of observation
## for(y in 1:Sites){
## for(x in 1:Months){
## e[1:Plants,y,x] ~ dmnorm(zeros,tauC[,])
## }
## }
##
## ##covariance among similiar species
## for(i in 1:Plants){
## for(j in 1:Plants){
## C[i,j] = exp(-lambda_cov * D[i,j])
## }
## }
##
## ## Covert variance to precision for each parameter, allow omega to shrink to identity matrix
## vCov = omega*C[,] + (1-omega) * I
## tauC=inverse(vCov*gamma)
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
## #Autocorrelation priors
## gamma = 1
##
## #Strength of covariance decay
## lambda_cov = 2
## omega = 1
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3236
## Total graph size: 26960
##
## Initializing model
## sink("model/threshold_repulsion.jags")
## cat("
## model {
##
## for (x in 1:Nobs){
##
## #Observation of a flowering plant
## Y[x] ~ dbern(p[x])
## logit(p[x]) <- alpha[Plant[x]] + e[Plant[x],Site[x],Month[x]]
##
## #Residuals
## discrepancy[x] <- abs(Y[x] - p[x])
##
## #Assess Model Fit
## Ynew[x] ~ dbern(p[x])
## discrepancy.new[x]<-abs(Ynew[x] - p[x])
## }
##
##
## #Sum discrepancy
## fit<-sum(discrepancy)/Nobs
## fitnew<-sum(discrepancy.new)/Nobs
##
## #Prediction
##
## for(x in 1:Npreds){
## #predict value
##
## #Observation - probability of flowering
## prediction[x] ~ dbern(p_new[x])
## logit(p_new[x])<- alpha[NewPlant[x]] + e[NewPlant[x],NewSite[x],NewMonth[x]]
##
## #predictive error
## pred_error[x] <- abs(Ypred[x] - p_new[x])
## }
##
## #Predictive Error
## fitpred<-sum(pred_error)/Npreds
##
## #########################
## #autocorrelation in error
## #########################
##
## #For each of observation
## for(x in 1:Months){
## for(y in 1:Sites){
## e[1:Plants,y,x] ~ dmnorm(zeros,tauC[,])
## }
## }
## ##covariance among similiar species
## for(i in 1:Plants){
## for(j in 1:Plants){
## C[i,j] = exp(-lambda_cov * D[i,j])
## }
## }
##
## ## Covert variance to precision for each parameter, allow omega to shrink to identity matrix
## vCov = omega*C[,] + (1-omega) * I
## tauC=vCov*gamma
##
## #Priors
##
## #Species level priors
##
## for (j in 1:Plants){
##
## #Intercept flowering probability
## alpha[j] ~ dnorm(0,0.386)
##
## }
## #Autocorrelation priors
## gamma = 10
##
## #Strength of covariance decay
## lambda_cov = 1
## omega = 1
## }
## ",fill=TRUE)
##
## sink()
## Compiling model graph
## Resolving undeclared variables
## Allocating nodes
## Graph information:
## Observed stochastic nodes: 2548
## Unobserved stochastic nodes: 3236
## Total graph size: 26959
##
## Initializing model
# One example
Glossoloma purpureum
## # A tibble: 8 x 2
## Model p
## <chr> <dbl>
## 1 baseline 0.8
## 2 baseline_site 1
## 3 interaction_attraction 1
## 4 interaction_repulsion 1
## 5 phylogenetic_attraction 1
## 6 phylogenetic_repulsion 1
## 7 trait_attraction 0.9
## 8 trait_repulsion 1
Without baseline
## # A tibble: 7 x 2
## Model p
## <chr> <dbl>
## 1 baseline_site 1
## 2 interaction_attraction 1
## 3 interaction_repulsion 1
## 4 phylogenetic_attraction 1
## 5 phylogenetic_repulsion 1
## 6 trait_attraction 0.9
## 7 trait_repulsion 1
| Model | mean | lower | upper |
|---|---|---|---|
| interaction_repulsion | 0.2419828 | 0.2251827 | 0.2745795 |
| trait_attraction | 0.2295758 | 0.2130084 | 0.2700281 |
| phylogenetic_attraction | 0.2262416 | 0.2111530 | 0.2630880 |
| phylogenetic_repulsion | 0.2223203 | 0.2059804 | 0.2568119 |
| trait_repulsion | 0.2146673 | 0.2011630 | 0.2507881 |
| interaction_attraction | 0.2143445 | 0.2007667 | 0.2520629 |
| baseline_site | 0.2013130 | 0.1982707 | 0.2062034 |
| Model | mean | lower | upper |
|---|---|---|---|
| interaction_repulsion | 0.2491073 | 0.2312657 | 0.2826222 |
| baseline | 0.2444993 | 0.2350229 | 0.2559249 |
| trait_attraction | 0.2403138 | 0.2203743 | 0.2868214 |
| phylogenetic_attraction | 0.2384491 | 0.2194833 | 0.2811207 |
| phylogenetic_repulsion | 0.2345271 | 0.2180863 | 0.2707964 |
| trait_repulsion | 0.2335044 | 0.2185556 | 0.2721741 |
| interaction_attraction | 0.2294894 | 0.2142321 | 0.2661119 |
| baseline_site | 0.2152432 | 0.2114810 | 0.2191240 |
Example prediction
Grab an example Drymonia teuscheri v Drymonia collegarum
## # A tibble: 16 x 3
## # Groups: Model [8]
## Model Plant mean
## <chr> <fct> <dbl>
## 1 baseline_site Drymonia collegarum 0.179
## 2 trait_repulsion Drymonia collegarum 0.195
## 3 phylogenetic_repulsion Drymonia collegarum 0.196
## 4 interaction_attraction Drymonia collegarum 0.218
## 5 trait_attraction Drymonia collegarum 0.233
## 6 phylogenetic_attraction Drymonia collegarum 0.233
## 7 baseline Drymonia collegarum 0.237
## 8 interaction_repulsion Drymonia collegarum 0.241
## 9 baseline_site Drymonia teuscheri 0.198
## 10 phylogenetic_repulsion Drymonia teuscheri 0.220
## 11 trait_repulsion Drymonia teuscheri 0.236
## 12 interaction_attraction Drymonia teuscheri 0.243
## 13 phylogenetic_attraction Drymonia teuscheri 0.257
## 14 trait_attraction Drymonia teuscheri 0.269
## 15 interaction_repulsion Drymonia teuscheri 0.275
## 16 baseline Drymonia teuscheri 0.277
D["Drymonia teuscheri","Drymonia collegarum"]
## [1] 0.02974
Dtraits["Drymonia teuscheri","Drymonia collegarum"]
## [1] 0.04191869
Dint["Drymonia teuscheri","Drymonia collegarum"]
## [1] 0.7483344
Logit E
inv.logit E
## # A tibble: 6 x 4
## # Groups: Model [6]
## Model Var1 Var2 Correlation_E
## <chr> <fct> <fct> <dbl>
## 1 interaction_attraction Drymonia teuscheri Drymonia colle… 0.255
## 2 interaction_repulsion Drymonia teuscheri Drymonia colle… -0.441
## 3 phylogenetic_attraction Drymonia teuscheri Drymonia colle… 0.963
## 4 phylogenetic_repulsion Drymonia teuscheri Drymonia colle… -0.957
## 5 trait_attraction Drymonia teuscheri Drymonia colle… 0.954
## 6 trait_repulsion Drymonia teuscheri Drymonia colle… -0.966
## # A tibble: 8 x 4
## # Groups: Model [8]
## Model Var1 Var2 Correlation_P
## <chr> <fct> <fct> <dbl>
## 1 baseline Drymonia teuscheri Drymonia colle… NA
## 2 baseline_site Drymonia teuscheri Drymonia colle… -0.197
## 3 interaction_attraction Drymonia teuscheri Drymonia colle… 0.139
## 4 interaction_repulsion Drymonia teuscheri Drymonia colle… -0.385
## 5 phylogenetic_attraction Drymonia teuscheri Drymonia colle… 0.956
## 6 phylogenetic_repulsion Drymonia teuscheri Drymonia colle… -0.757
## 7 trait_attraction Drymonia teuscheri Drymonia colle… 0.944
## 8 trait_repulsion Drymonia teuscheri Drymonia colle… -0.791
## # A tibble: 8 x 4
## # Groups: Model [8]
## Model Var1 Var2 Correlation_Ynew
## <chr> <fct> <fct> <dbl>
## 1 baseline Drymonia teuscheri Drymonia co… NA
## 2 baseline_site Drymonia teuscheri Drymonia co… NA
## 3 interaction_attraction Drymonia teuscheri Drymonia co… NA
## 4 interaction_repulsion Drymonia teuscheri Drymonia co… NA
## 5 phylogenetic_attraction Drymonia teuscheri Drymonia co… NA
## 6 phylogenetic_repulsion Drymonia teuscheri Drymonia co… NA
## 7 trait_attraction Drymonia teuscheri Drymonia co… NA
## 8 trait_repulsion Drymonia teuscheri Drymonia co… NA
Flowering patterns
Association Matrices
Decay pattern
Model Fit and Prediction Fit
Supplamental figures